/**
 * N个数，一共进行N步操作。每一步等概率的从剩下的数里面挑出一个
 * 问每一步结束后挑出来的数的和的期望
 * 显然第K步后一共有P(N, K)种可能，等概率
 * 考虑某个元素i，它一共出现在K*P(N-1,K-1)种情况之中
 * 因此和的期望是
 *  SUM * K * P(N-1,K-1) / P(N, K)
 * 就是：  K * SUM / N
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vvi = vector<vi>;

llt const MOD = 998244353LL;

llt qpow(llt a, llt n){
    llt r = 1;
    while(n){
        if(n & 1) r = r * a % MOD;
        a = a * a % MOD;
        n >>= 1;
    }
    return r;
}

llt inv(llt a){return qpow(a, MOD - 2LL);}

int N;
vector<llt> A;

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> N;
    A.assign(N, 0);
    llt s = 0;
    for(auto & i : A) cin >> i, s = (s + i) % MOD;
    llt f = inv(N);
    for(int i=0;i<N;++i){
        cout << s * (i + 1) % MOD * f % MOD << " ";     
    }
    return 0;
}